<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 
			客户端要处理的东西：
				点击上传文件，获取格式，大小
					可选文件转换传输形式：formdata，base64/buffer
					######=======================单点上传
					格式校验：file的type和size
					formdata为例子：
						发送请求，formdata传了file文件流和filename文件名字
						上传成功会获取返回的成功信息
					base64/buffer为例子：
						拿到file用fileReader如果进行转换成base64
							fileread.readAsDataURL(file)
							如果进行转换成buffer
							fileread.readAsArrayBuffer(file)
							然后fileread.onload(ev){拿ev里面的target.result}
						发送请求，
							处理对象比如：{chunk：encodeURIComponent(拿到的文件result-base64)，filename：'xxx'}
							让对象以&拼接：chunk=base64字符串&filename='xxx'，传到接口去请求，header改成{'content-type':'application/x-www-form-urlencoded'}
						上传成功会获取返回的成功信息
					######=======================断点续传
					要用到md5转换，需要使用相关的md5插件
					定义total字段为记录进度，total>0||total<100时出现按钮，
						同时用一个事件进行按钮的‘继续’与‘暂停’以及其他状态的显示的显示判断，并触发请求（这里根据实际情况而定）
					格式校验：file的type和size
					拿到之后转buffer，然后切片处理（固定数量/固定大小，两种方案）
					固定数量为例子：
						每个切片有自己的数据和名字
						先创建一个比如MD5处理buffer的实例
							savemd5 = MD5处理buffer的实例（或者其他形式的md5处理buffer），这时候没处理buffer文件
						然后定义比如
							hash，存储片段的hash名称（hash值）
							suffix，存储片段的后缀名称
						把buffer文件放到md5实例里面去处理，并得到hash值和后缀名称
							比如savemd5.append(buffer文件)
							hash = savemd5.end()
							suffix = /\.([0-9a-zA-Z]+)$/i.exec(未转buffer的file.name)[1]
						生成切片，搞个数组集合存储切片并存储整个文件大小的每一份的值，同时记录遍历的索引比如
							partlist = []
							partsize = 未转buffer的file.size/固定数量值,建议向上取整
							cur = 0//存索引
							遍历需要固定的一个数量值
								一次遍历里面定义一个对象比如
									item = {
										chunk:未转buffer的file.slice(cur,partsize)，
										filename:hash+'_'+i+suffix
									}
									cur = cur + partsize
									partlist.push(item)
							把集合注册到vue的data里面比如thepartlist字段，把hash也注册到里面比如hash，并调用下面定义到的方法（不用传参数，或者可以用其他方式）
						生成切片的方法外面，定义个异步async上传切片的方法
							根据切片数量生成对应数量的请求
							定义个请求集合比如
								requestList = []
								给thepartlist进行foreach
									每个遍历里面
										搞个fn，在fn里面，创建formdata实例比如
											formdata = new Formdata()
											formdata.append('chunk',item.chunk)//item是foreach回调的第一个参数item
											formdata.append('filename',item.filename)
											并返回一个post请求，直接传formdata，header改成{'content-type':'multipart/form-data'}
												拿到返回的成功信息，然后total+1,然后切片集合里面删除对应下标的切片
										把这个fn，push到requestList里面
								传递切片（并行,如果暂停，ajax.abort()强制停止/串行），然后合成文件：
									串行例子：
										i=0;
										complate = async () => {
											//调用合并
											传{hash:hash值}
											成功就返回东西比如返回的上传成功的链接
										}
										send = async ()=>{
											/*if(abort){
												setTimeout(()=>{
													send()													
												},1000)
											}*/
											if(abort){return}
											if(i>=requestList.length){
												complate()
												return;
											}
											await requestList[i]();//调用请求，完事之后下面递归，走下一个请求
											i++
											send()
										}
										send()
						实现暂停然后继续：
							全局重新定义个方法，在methods里面（因为是vue，所以在methods里面定义），用来切换状态并调接口
							一般true为继续，false为暂停，比如
							if(btn == true){
								//给个比如abort标识为false，代表恢复上传
								btn = false
								//如果上面不是虚空递归，直接重新调回切片上传方法
								//return
							}
							不然暂停，然后
							//给个比如abort标识为true，代表恢复上传
							btn = true
		 -->
	</body>
</html>
